home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / cproto-3.0 / CHANGES next >
Encoding:
Text File  |  1995-05-03  |  7.7 KB  |  268 lines

  1. Version 3
  2.  
  3. Patchlevel 7
  4.  
  5. - Fix: The processing of string literals is now more robust.
  6.  
  7. - Removed the -f4 option which generated prototypes like
  8.  
  9.     int main P_((int argc, char **argv));
  10.  
  11.   Use the -m option now to put a guard macro around the prototype
  12.   parameter list.  Use the -m option together with -f3 (which is the
  13.   default) to produce the same output as the old -f4 option.  The option
  14.   to set the guard macro name is now -M.
  15.  
  16. - Comments in prototype parameter lists are now disabled by default.
  17.   Use the -c option now to output these comments.
  18.  
  19. - Can now process #include directives in which the file is specified with
  20.   a #define macro.
  21.  
  22. - Now does not convert function definitions that take the formal
  23.   parameter va_alist from <varargs.h>.
  24.  
  25. - Now recognizes the GNU C modifiers __const and __inline__.
  26.  
  27. Patchlevel 6
  28.  
  29. - Fix: A function in lex.l exploited the ANSI C feature of concatenating
  30.   string literals.  This prevented the module from being compiled with
  31.   pre-ANSI C compilers.
  32.  
  33. Patchlevel 5
  34.  
  35. - Fix: The -v option did not output declarations for function pointers.
  36.  
  37. - Fix: String literals continued over more than one line messed up the
  38.   line number count.
  39.  
  40. - Fix: The program generated incorrect prototypes for functions that
  41.   take a variable argument list using <varargs.h>.
  42.  
  43. - Fix: When converting functions from the standard input, cproto
  44.   generated no output if no functions needed to be converted.
  45.  
  46. - Fix: Now does not output a warning if an untagged struct is found in a
  47.   typedef declaration.
  48.  
  49. - Added the -b option which rewrites function definition heads to
  50.   include both old style and new style declarations separated by a
  51.   conditional compilation directive.  For example, the program can
  52.   generate
  53.  
  54.     #ifdef ANSI_FUNC
  55.  
  56.     int
  57.     main (int argc, char *argv[])
  58.     #else
  59.  
  60.     int
  61.     main (argc, argv)
  62.     int argc;
  63.     char *argv[]
  64.     #endif
  65.     {
  66.     }
  67.  
  68.   Added the -B option to set the preprocessor directive that appears at
  69.   the beginning of such definitions.
  70.  
  71. - Added the keyword "interrupt" to the set of type qualifiers when
  72.   compiled on a UNIX system.
  73.  
  74. - The MS-DOS version now recognizes the type modifiers introduced by
  75.   Microsoft C/C++ 7.00.
  76.  
  77. - Now recognizes ANSI C trigraphs (yuck!).
  78.  
  79. - Now use "#if __STDC__" instead of "#if defined(__STDC__)".
  80.  
  81. - GNU bison orders the y.tab.c sections differently than yacc, which
  82.   resulted in references to variables before they were declared.  The
  83.   grammar specification was modified to also be compatible with bison.
  84.  
  85. Patchlevel 4
  86.  
  87. - Fix: A typedef name defined as a pointer to char, short or float was
  88.   incorrectly promoted if it was used to specify a formal parameter.
  89.   For example, for the definition
  90.  
  91.     typedef char *caddr_t;
  92.  
  93.     int strlen (s)
  94.     caddr_t s;
  95.     {
  96.     }
  97.  
  98.   cproto generated the incorrect prototype
  99.  
  100.     int strlen(int s);
  101.  
  102. - Added implementation of the ANSI function tmpfile() for systems that
  103.   don't have it.
  104. - If compiled with Microsoft C, cproto preprocesses its input by running
  105.   the command "cl /E".  To eliminate the error messages when the file
  106.   <malloc.h> is included, the program now recognizes the specifier
  107.   _based(void).
  108.  
  109. Patchlevel 3
  110.  
  111. - Fix: The program didn't generate prototypes for functions defined with
  112.   the extern specifier.
  113. - Fix: The -c option didn't output a space before parameter names in
  114.   generated prototypes.
  115. - Added the -E option to specify a particular C preprocessor to run or
  116.   to stop the program from running the C preprocessor.
  117. - Added the -q option to stop the program from outputting error messages
  118.   when it cannot read the file specified in an #include directive.
  119. - Made the yacc specification compatible with UNIX SYSVR4 yacc.
  120.   
  121. Patchlevel 2
  122.  
  123. - Fix: The function definition conversion may produce a mangled function
  124.   definition if an #include directive appears before the function and
  125.   no comments appear between the directive and the function.
  126. - Fix: The size of the buffer allocated for the C preprocessor command
  127.   string did not include enough space for options set in the environment
  128.   variable CPROTO.
  129. - Replaced the -n option with -c which disables all comments in the
  130.   generated prototypes.
  131. - Replaced the enum's with #define constants to accommodate C compilers
  132.   that don't like enumerators in constant expressions.
  133.  
  134. Patchlevel 1
  135.  
  136. - Fix: The program was calling ftell() on an invalid FILE pointer.
  137.  
  138. Patchlevel 0
  139.  
  140. - Added options to convert function definitions between the old style
  141.   and ANSI C style.
  142. - Options can be specified from the environment variable CPROTO.
  143. - The MS-DOS version recognizes more Microsoft C and Borland C++ type
  144.   modifiers (such as _cdecl, _far, _near).
  145. - Fix: Formal parameters specified with typedef names were not promoted.
  146.   For example, for the definition
  147.  
  148.     typedef unsigned short ushort;
  149.  
  150.     void test (x)
  151.     ushort x;
  152.     {
  153.     }
  154.  
  155.   cproto generated the incorrect prototype
  156.  
  157.     void test(ushort x);
  158.  
  159.   while the correct one is
  160.  
  161.     void test(int x);
  162.  
  163. - Fix: Incorrect prototypes were generated for functions that returned
  164.   function pointers.  For example, cproto generated an incorrect
  165.   prototype for the function definition
  166.  
  167.     void (*signal(int x, void (*func)(int y)))(int z)
  168.     {
  169.     }
  170.  
  171. - Fix: Changed calls to memory allocation functions to abort the program
  172.   if they fail.
  173.  
  174. Version 2
  175.  
  176. Patchlevel 3
  177.  
  178. - Made cproto compatible with GNU flex.
  179. - After compiling with the preprocessor symbol TURBO_CPP defined, on
  180.   MS-DOS systems, cproto will pipe its input through the Turbo C
  181.   preprocessor.
  182. - Fix: Typedef names may now be omitted from typedef declarations.
  183.   For example, every C compiler I tried accepts
  184.  
  185.     typedef int;
  186.  
  187.   and some even give warnings when encountering this statement.
  188.  
  189. Patchlevel 2
  190.  
  191. - Cproto is now able to generate prototypes for functions defined in lex
  192.   and yacc source files named on the command line.  Lex and yacc source
  193.   files are recognized by the .l or .y extension.
  194. - Fix: The memory allocated to the typedef symbol table was not being
  195.   freed after scanning each source file.
  196. - Fix: Failure to reset a variable during error recovery caused
  197.   segmentation faults.
  198.  
  199. Patchlevel 1
  200.  
  201. - Fix: Cproto incorrectly generated the parameter "int ..." in
  202.   prototypes of functions taking variable parameters.
  203. - Fix: Function definitions can now be followed by an optional
  204.   semicolon.  I found this feature in every C compiler I tried.
  205.  
  206. Patchlevel 0
  207.  
  208. - Added formal parameter promotion.
  209. - Added prototype style that surrounds prototypes with a guard macro.
  210. - Handles C++ style comment //.
  211. - Nifty new way to set prototype output format.
  212. - Got rid of the shell wrapper used to pipe the input through the C
  213.   preprocessor (cpp).
  214. - For the port to MS-DOS, I modified cproto to run without cpp, but
  215.   since I didn't want to reimplement cpp, the program processes only the
  216.   #include and #define directives and ignores all others.  Macro names
  217.   defined by the #define directive are treated like typedef names if
  218.   they appear in declaration specifiers.
  219.  
  220. Version 1
  221.  
  222. Patchlevel 3
  223.  
  224. - Fix: identical typedef names and struct tags should be allowed.
  225.   For example:
  226.  
  227.     typedef struct egg_salad egg_salad;
  228.  
  229.     struct egg_salad {
  230.         int mayo;
  231.     };
  232.  
  233.     void dine(egg_salad l)
  234.     {
  235.     }
  236.  
  237. Patchlevel 2
  238.  
  239. - Fix: A typedef statement should allow a list of typedefs to be declared.
  240.   Example:
  241.  
  242.     typedef int a, *b;
  243.  
  244. - Fix: When run with the -v option on this input, cproto did not output
  245.   a declaration for variable "b":
  246.  
  247.     char *a="one"; char *b="two";
  248.  
  249. - The options were renamed.  Added new options that change the output
  250.   format of the prototypes.
  251.  
  252. Patchlevel 1
  253.  
  254. - Fix: Incorrect prototypes were produced for functions that take
  255.   function pointer parameters or return a function pointer.  For example,
  256.   cproto produced an erroneous prototype for this function definition:
  257.  
  258.     void
  259.     (*signal (sig, func))()
  260.     int sig;
  261.     void (*func)();
  262.     {
  263.         /* stuff */
  264.     }
  265.  
  266. - The lexical analyser now uses LEX.  It should still be compatible with
  267.   FLEX.
  268.